package server

import (
	"database/sql"
	"fmt"
	"log"

	// _ "github.com/lib/pq"
	_ "github.com/go-sql-driver/mysql"
	"go.uber.org/zap"
)

// MySQL mysql
type MySQL struct {
	Acc      string
	Pw       string
	Addr     string
	Port     string
	Database string
	DB       *sql.DB
	logger   *zap.Logger
}

// NewMySQL new sql
func NewMySQL(Acc string, Pw string, Addr string, Port string, Database string, logger *zap.Logger) *MySQL {
	return &MySQL{
		Acc:      Acc,
		Pw:       Pw,
		Addr:     Addr,
		Port:     Port,
		Database: Database,
		logger:   logger,
	}
}

var MysqlDb *MySQL

// Start connect mysql
func (mysql *MySQL) Start() {

	// 初始化mysql连接
	sqlConn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", mysql.Acc, mysql.Pw,
		mysql.Addr, mysql.Port, mysql.Database)
	DB, err := sql.Open("mysql", sqlConn)
	if err != nil {
		mysql.logger.Panic("mysql", zap.Error(err), zap.String("sqlConn", sqlConn))
		// log.Panic("mysql", err)
	}

	// 测试db是否正常
	err = DB.Ping()
	if err != nil {
		// Logger.Panic("mysql", zap.Error(err))
		log.Panic("mysql", err)
	}
	mysql.DB = DB
	MysqlDb = mysql

	// // 初始化mysql连接
	// sqlConn := fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable", mysql.Acc, mysql.Pw,
	// 	mysql.Addr, mysql.Port, mysql.Database)

	// fmt.Println(sqlConn)
	// db, err := sql.Open("postgres", sqlConn)
	// if err != nil {
	// 	Logger.Fatal("init mysql error", zap.Error(err))
	// }

	// // 测试db是否正常
	// err = db.Ping()
	// if err != nil {
	// 	Logger.Fatal("init mysql, ping error", zap.Error(err))
	// }
	// mysql.DB = db
	// MysqlDb = mysql
	// return db
}

// Close stop sql
func (mysql *MySQL) Close() error {
	if mysql.DB != nil {
		err := mysql.DB.Close()
		if err != nil {
			// mysql.logger.Error("mysql", zap.Error(err))
			log.Println(err)
		}
	}
	return nil
}
